#include<iostream>
#include<stack>
#include<string>
using namespace std;
stack<int> kh;  // 栈用于匹配括号
int ans[200];   // 用于记录每行是否匹配
int bj[5];      // bj[1] -> '(', bj[2] -> '[', bj[3] -> '{'
int main(){
    int n;
    cin >> n;
    for(int i = 1; i <= n; i++){
        string s;
        cin >> s;
        for(int j = 0; j < s.length(); j++){
              if(s[j] == '<') {
                if(!kh.empty()&&kh.top()<=1) ans[i] = 1;  // 如果 '(' 已经在栈中，但再次遇到 '(' ，说明错误
                else {
                    kh.push(1);  // 1 代表 '('
                    bj[1] = 1;   // 标记 '(' 已经存在
                }
            }
            // 处理 '('
            if(s[j] == '(') {
                if(!kh.empty()&&kh.top()<=2) ans[i] = 1;  // 如果 '(' 已经在栈中，但再次遇到 '(' ，说明错误
                else {
                    kh.push(2);  // 2代表 '('
                    bj[2] = 1;   // 标记 '(' 已经存在
                }
            }
            // 处理 '['
            if(s[j] == '[') {
                if(!kh.empty()&&kh.top()<=3) ans[i] = 1;  // 如果 '[' 在栈中或 '(' 没闭合，错误
                else {
                    kh.push(3);  // 3代表 '['
                    bj[3] = 1;   // 标记 '[' 已经存在
                }
            }
            // 处理 '{'
            if(s[j] == '{') {
                if(!kh.empty()&&kh.top()<=4) ans[i] = 1;  // 如果 '{' 在栈中或上层括号没闭合，错误
                else {
                    kh.push(4);  // 4 代表 '{'
                    bj[4] = 1;   // 标记 '{' 已经存在
                }
            }
          
            // 处理 ')'
            if(s[j] == '>') {
                if(kh.empty() || kh.top() != 1) ans[i] = 1;  // 如果栈空或者不是 '<' ，错误
                if(!kh.empty() && kh.top() == 1) {
                    kh.pop();    // 弹出 '<'
                    bj[1] = 0;   // 重置 '<' 标记
                }
            }
            if(s[j] == ')') {
                if(kh.empty() || kh.top() != 2) ans[i] = 1;  // 如果栈空或者不是 '(' ，错误
                if(!kh.empty() && kh.top() == 2) {
                    kh.pop();    // 弹出 '('
                    bj[2] = 0;   // 重置 '(' 标记
                }
            }
            // 处理 ']'
            if(s[j] == ']') {
                if(kh.empty() || kh.top() != 3) ans[i] = 1;  // 如果栈空或者不是 '[' ，错误
                if(!kh.empty() && kh.top() == 3) {
                    kh.pop();    // 弹出 '['
                    bj[3] = 0;   // 重置 '[' 标记
                }
            }
            // 处理 '}'
            if(s[j] == '}') {
                if(kh.empty() || kh.top() != 4) ans[i] = 1;  // 如果栈空或者不是 '{' ，错误
                if(!kh.empty() && kh.top() == 4) {
                    kh.pop();    // 弹出 '{'
                    bj[4] = 0;   // 重置 '{' 标记
                }
            }
            // 如果已经发现不匹配，提前结束处理
            if(ans[i]) break;
        }

        // 处理完一行后，如果栈不为空，说明有未闭合的括号
        if(!kh.empty()) ans[i] = 1;
        
        // 清空栈，重置标记位
        while(!kh.empty()) kh.pop();
        bj[1] = bj[2] = bj[3] = 0;
        bj[4]=0;
    }

    // 输出结果
    for(int i = 1; i <= n; i++){
        if(ans[i]) cout << "Fail" << endl;
        else cout << "Match" << endl;
    }

    return 0;
}
